package com.alks.function.mapper.finance.costcheck;


import com.alks.entity.data.entity.*;
import com.alks.function.data.dto.finance.costcheck.PcCostLotDto;
import com.alks.function.data.dto.finance.costcheck.PcLotHeadDto;
import com.alks.function.data.dto.finance.costcheck.PcVRecSlipCfmDto;
import com.alks.function.data.request.finance.costcheck.LotCostRequest;
import com.alks.function.data.request.finance.costcheck.LotCostUpdateBatchRequest;
import com.alks.function.data.request.finance.costcheck.LotCostUpdateRequest;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.math.BigDecimal;
import java.time.LocalDate;
import java.util.List;

@Mapper
public interface PcLotCostMapper {

    /*完工指令明细*/
    List<PcCostLotDto> getCompleteLotDetail(@Param("companyId") String companyId, @Param("request") LotCostRequest request);

    /*未完工指令明细*/
    List<PcLotHeadDto> getNotCompleteLotDetail(@Param("companyId") String companyId, @Param("request") LotCostRequest request);

    /*批量查询完工指令明细*/
    List<PcCostLotDto> getCompleteLotDetailBatch(@Param("companyId") String companyId, @Param("lotNoList") List<String> lotNoList);

    /*批量更新*/
    int updateCostBatch(@Param("companyId") String companyId, @Param("request") LotCostUpdateBatchRequest request);

    /*取消封账*/
    int updateCostBatchBeNull(@Param("companyId") String companyId, @Param("request") LotCostUpdateBatchRequest request);

    /*插入计算*/
    int addCostBatch(@Param("request") List<PcCostLotDto> request);

    /*完工删除*/
    int deleteCostBatch(@Param("companyId") String companyId, @Param("lotNoList") List<String> lotNoList);

    /*普通更新*/
    int updateCost(@Param("companyId") String companyId, @Param("request") LotCostUpdateRequest request);

    /**
     * 查询未封账的指令
     * @return
     */
    List<String> getLotNoByFlagToCost();

    /**
     * 删除成本明细
     * @param lotNo
     * @return
     */
    int delCostDetail(String lotNo);

    /**
     * 删除主表数据
     * @param lotNo
     * @return
     */
    int delCostHead(String lotNo);

    /**
     * 查询物料 排除成型物料类
     * @param lotNo
     * @return
     */
    List<PcLotUsage> getPcLotUsageList(String lotNo);

    /**
     * 查询面材材料单价
     * @param lotNo
     * @param mtlNo
     * @return
     */
    BigDecimal getPrice(@Param("lotNo") String lotNo, @Param("mtlNo") String mtlNo);

    /**
     * 查询贴合材料子材料明细
     * @param mtlNo
     * @param companyId
     * @return
     */
    List<SdBomFitSub> getSdBomFitList(@Param("mtlNo") String mtlNo, @Param("companyId") String companyId);

    /**
     * 查询材料最大时间和单号
     * @param lotNo
     * @param mtlNo
     * @return
     */
    PcDrawDetail getSlipDateAndSlipNo(String lotNo, String mtlNo);

    /**
     * 查询替代的编码
     * @param mtlNo
     * @param slipNo
     * @return
     */
    String getPcDrawReplace(@Param("mtlNo") String mtlNo, @Param("slipNo") String slipNo);

    /**
     * 根据日期查单价
     * @param mtlNo
     * @param date
     * @return
     */
    BigDecimal getPriceByDate(@Param("mtlNo") String mtlNo, @Param("date") LocalDate date);

    /**
     * 查询最大送货单价
     * @param mtlNo
     * @return
     */
    BigDecimal getPriceByMtlNo(String mtlNo);

    /**
     * 添加成本明细
     * @param detail
     * @return
     */
    int addFrLotCostDetail(FrLotCostDetail detail);

    /**
     * 修改金额
     * @param lotNo
     * @param mtlType
     * @return
     */
    int updateFrLotCostDetailByAmt(@Param("lotNo") String lotNo, @Param("mtlType") String mtlType);

    /**
     * 查询面材多购数据
     * @param lotNo
     * @return
     */
    List<PcVRecSlipCfmDto> getVList(String lotNo);

    /**
     * 处理包材数据
     * @param lotNo
     */
    List<PcPackDetail> getPcPackDetailList(String lotNo);

    /**
     * 查询包材最大单价
     * @param lotNo
     * @param mtlNo
     * @return
     */
    BigDecimal getPrice2(String lotNo, String mtlNo);

    /**
     * 查询大底数据
     * @param lotNo
     * @return
     */
    List<PcVRecSlipCfmDto> getVList2(String lotNo,String mtlType);

    /**
     * 查询面材汇总金额
     * @param lotNo
     * @param mtlType
     * @param flag 1 大底 2 面材
     * @return
     */
    BigDecimal getLotDetailSum(String lotNo,String mtlType,int flag);

    BigDecimal getLotDetailSum2(String lotNo, String mtlType);

    BigDecimal getLotDetailSum3(String lotNo, String mtlType);

    BigDecimal getLotDetailSum4(String lotNo);

    BigDecimal getLotDetailSum5(String lotNo);

    BigDecimal getLotDetailSum6(String lotNo);

    BigDecimal getLotDetailSum7(String lotNo);

    BigDecimal getLotDetailSum8(String lotNo, BigDecimal orderQty);

    BigDecimal getLotDetailSum9(String lotNo, BigDecimal orderQty);

    BigDecimal getLotDetailSum10(String lotNo, BigDecimal orderQty);

    int addFrLotCostHead(FrLotCostHead costHead);

    int updateFrLotCostHead(String lotNo);

    int updatePcCostLot(String lotNo);
}
